﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Interfaces;
using HerGoS.Viaticos.Entities.Interfaces;

namespace HerGoS.Viaticos.Entities
{
    [Serializable]
    public class Rendicion : ViaticosBaseClass, ITramos, IViaticosPrototype
    {
        #region Construction
        public Rendicion()
        {
            Initializer();
        }
        private void Initializer()
        {
            this.Tramos = new List<Tramo>();

        }

        #endregion

        #region DataMembers

        private int _NumeroRendicion;
        private DateTime? _FechaRendicion;
        private string _ObjetivoViaje;
        private Solicitud _SolicitudRendida;
        private List<Tramo> _Tramos;
     

        #endregion



        #region Properties
        

        public int NumeroRendicion
        {
            get { return _NumeroRendicion; }
            set { this._NumeroRendicion = value; }
        }

        public DateTime? FechaRendicion
        {
            get { return this._FechaRendicion; }
            set { this._FechaRendicion = value; }
        }

        public string ObjetivoViaje
        {
            get { return this._ObjetivoViaje; }
            set { this._ObjetivoViaje = value; }

        }

        public Solicitud SolicitudRendida
        {
            get { return this._SolicitudRendida; }

            set { this._SolicitudRendida = value; }
        }


        public Distancia Distancia
        {
            get { return _Distancia; }
            set { _Distancia = value; }
        }


        #endregion

        #region Overrides
        /// <summary>
        /// Returns the string of the object.
        /// </summary>
        /// <returns>String</returns>
        public override String ToString()
        {
            return this.NumeroRendicion.ToString();
        }

        #endregion







        #region ITramos Members


        public List<Tramo> Tramos
        {
            get
            {
                return _Tramos;
            }
            set
            {
                _Tramos = value;
            }
        }

        #endregion

        #region IViaticosPrototype Members

        public List<Tramo> Clone()
        {
            return Tramos.Select(x => new Tramo
            {
                Persistencia = EstadoPersistencia.INSERT,
                CiudadOrigen = x.CiudadOrigen,
                NroServicioOrigen = x.NroServicioOrigen,
                CodigoOrigen = x.CodigoOrigen,
                FechaOrigen = x.FechaOrigen,
                MontoTerminalOrigenIda = x.MontoTerminalOrigenIda,
                MontoTerminalOrigenVuelta = x.MontoTerminalOrigenVuelta,
                ObservacionOrigen = x.ObservacionOrigen,
                CiudadDestino = x.CiudadDestino,
                NroServicioDestino = x.NroServicioDestino,
                CodigoDestino = x.CodigoDestino,
                FechaDestino = x.FechaDestino,
                MontoTerminalDestinoIda = x.MontoTerminalDestinoIda,
                MontoTerminalDestinoVuelta = x.MontoTerminalDestinoVuelta,
                ObservacionDestino = x.ObservacionDestino,
                Transporte = x.Transporte,
                TarifaDiariaDestino = x.TarifaDiariaDestino,
                DiasViaticos = x.DiasViaticos,
                PorcentajeViatico = x.PorcentajeViatico,
                PorcentajeAplicacion = x.PorcentajeAplicacion,
                OID = x.OID,
                Activo = x.Activo,
                kmRecorridos = x.kmRecorridos
            }
            ).ToList<Tramo>();
        }

        #endregion
    }
}
